package com.weimob.mcloud.wechatwork.customer.domain;

import com.weimob.mcloud.wechatwork.core.adapter.pojo.dto.channel.response.SelfExternalContactGetBO;
import com.weimob.mcloud.wechatwork.customer.domain.enums.CorpExternaluserChangEventEnum;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.util.Date;

/**
 * 企业微信时间变更消息体（附带了其他消息转发内容）
 */
@Data
@ToString
public class ExternalUserChangeInfo implements Serializable {
    private static final long serialVersionUID = -5004253975300696922L;

    /**
     * corpId
     */
    private String ToUserName;
    /**
     * 固定格式 sys 暂时没有用
     */
    private String FromUserName;
    /**
     * 固定格式 event 暂时没有用
     */
    private String MsgType;
    /**
     * 外部联系人、标签、群事件标识
     *
     * @see CorpExternaluserChangEventEnum
     */
    private String Event;
    /**
     * 回调时间戳
     */
    private String TimeStamp;
    /**
     * 外部联系人、标签、群 具体事件标识
     *
     * @see CorpExternaluserChangEventEnum
     */
    private String ChangeType;
    /**
     * 腾讯CreateTime
     */
    private Long CreateTime;
    /**
     * 代自建应用的templateId
     */
    private String templateId;
    /**
     * 企业服务人员的UserID
     */
    private String UserID;
    /**
     * 外部联系人ID
     */
    private String ExternalUserID;
    /**
     * 欢迎语
     */
    private String WelcomeCode;

    /**
     * 客户来源追踪标识
     */
    private String State;

    /**
     * 客户群id
     */
    private String ChatId;

    /**
     * 客户群
     * 变更详情。目前有以下几种：
     * add_member : 成员入群
     * del_member : 成员退群
     * change_owner : 群主变更
     * change_name : 群名变更
     * change_notice : 群公告变更
     */
    private String UpdateDetail;

    /**
     * 客户群成员退群方式
     * 当是成员退群时有值。表示成员的退群方式
     * 0 - 自己退群
     * 1 - 群主/群管理员移出
     */
    private Integer QuitScene;

    /**
     * 客户群成员退群时间
     * 注：只有在腾讯接口被限频的情况下，会赋值第一次被限频的时间
     */
    private Date quitDate;

    /**
     * 标签或标签组的ID
     */
    private String Id;
    /**
     * 变更标签时，此项为tag，变更标签组时，此项为tag_group
     */
    private String TagType;

    /**
     * bosId
     */
    private Long bosId;

    /**
     * 客户wid
     */
    private Long customerWid;

    /**
     * 流失TYPE 1：客户删员工 2： 员工删客户
     */
    private Integer loseType;
    /**
     * 是否为历史外部联系人同步 0:否 1：是
     */
    private Integer historyCustomerSync;

    /**
     * 二阶段消息体处理
     */
    private SelfExternalContactGetBO selfExternalContactGetBO;
    /**
     * 是否为重试消息
     */
    private Boolean retryFlag = false;

    /**
     * 重试次数
     */
    private Integer retryCount = 0;


    /**
     * 限频的taskId
     */
    private Long taskId;

    /**
     * 是否是历史数据
     */
    private Boolean isInitGroup;

}
